Глава 3
9:19 02.01.2006
Программа R30_02d
d:\ЯзыкС++\Kross01\StructClass\Упражнения1\R30_02d
В этой программе правильное использование функции
случайных чисел для нахождения первых двух слов
в кроссворде.
Добавлены три заголовочных файла
#include <stdlib.h>
#include <math.h>
#include <time.h>
и добавлена инструкция
srand(time(NULL));
необходимых для правильной работы
функции rand()
После этого инструкции
num_curword1 = rand()%400;
nds.g28 = curword7[num_curword1];
num_curword2 = rand()%400;
nds.g29 = curword7[num_curword2];
стали работать правильно и программа
стала выдавать каждый раз новое случайное число
а следовательно и новое слово при исполнении
exe-файла.
Вообще эта программа самая умная на сегодня
Так держать!!!!
Но есть недостаток- иногда в готовом кроссворде
может повториться одно и то же слово дважды.
Программа работает хорошо но надо добавить
к ней способность если есть в найденных
словах повторяющиеся слова,то чтоб она
подбирала в уже найденных словах такие,
которые не повторяются.
Это будет реализовано в дальнейшем в программе
d:\ЯзыкС++\Kross01\StructClass\Упражнения1\R30_02f
9:21 02.01.2006
Теперь надо несколько переделать функцию fn7b.cpp
так,чтобы программа работала почти без вмешательства
человека.То есть все те моменты,когда программа
пишет - выберите слово,были заменены на выбор слова самой
программой.
8:41 03.01.2006
В этой же программа заметил,что во многих местах
этой многомодульной программы повторяется
следующий код:
//-----------------------------------------------------------------------------------------------
// 1
//--------------------------------'--------------------------------------------------------------
//сосчитаем количество слов в файле infile07.txt
//при помощи функции fn4()
//из этого файла будем брать 7-буквенные слова для кроссворда
int n;
char fileName1[15] = "infile07.txt";
int kolSlov7;
fn4(fileName1, kolSlov7);
//слова в указанном файле сосчитаны
// 2
//считаем слова из файла infile7.txt в массив curword7 в динамич памяти
// и попросим пользователя выбрать два слова для кроссворда
//применив для этого функцию fn5
string *curword7 = new string[kolSlov7];
nds.g28,nds.g29; //
fn5(fileName1,curword7,kolSlov7);
// слова из файла infile7.txt считаны в массив curword7 в динамич памяти
------------------------------------------------------------------
Суть этого фрагмента программы в том,чтобы считать из
текстового файла в динамическую память.Чтобы потом с этим
материалом в динамической памяти можно было работать.
Можно ли из этого фрагмента сделать функцию?
И главное : нужно ли это делать?
Дело в том что внутри функции будет образовываться массив
в динамической памяти.
string *curword7 = new string[kolSlov7];
Но опять встанет вопрос чтобы как то не забыть удалить
массивы из динамической памяти.И это должно опять произойти
вне функции.А это уже опасно,когда массивы из динамической
памяти удаляются не в том блоке,в котором они создаются.
19:58 03.01.2006
d:\ЯзыкС++\Kross01\StructClass\Упражнения1\R30_02f
Вот удивительная программа которая сама находит
все 6 слов для кроссворда.
При этом не допускает повторяющихся слов.
И при каждом запуске находит новые и новые кроссворды
(используется функция случайных чисел)
Если мы желаем повторить результат,то смотрим первые два слова
из этой программы(указаны их номера в списке)
и запускаем на выполнение программу R30_02b
Она должна повторить результат работы этой программы,
то есть должен получиться такой же кроссворд.
Еще лучше проверять это программой R30_02e
потому что она производит убирание повторяющихся слов
как и данная программа,но работает не применяя
функции случайных чисел.
-------------------------------------------------
Программа R30_02g
d:\ЯзыкС++\Kross01\StructClass\Упражнения1\R30_02g
То же что предыдущая программа.Выводит сразу кроссворд
и ничего лишнего.Это удобнее для простого пользователя.
Назад |
Начало урока |
Вверх |
Вперед
Содержание